package com.android.testSoundPool;

import android.app.Activity;

import android.os.Bundle;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.util.Log;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Handler;

public class TestSoundPoolActivity extends Activity implements
		View.OnClickListener, SoundPool.OnLoadCompleteListener {
	static String TAG = "TestSoundPoolActivity规定发给第三方方式发生的方式";
	SoundPool sndPool;
	int sndid;
	int[] StreamID = new int[6];
	int StreamNum = 0;// 播放数量
	int StreamNumPause = 0;// 暂停数量
	int[] rid = new int[] { R.raw.iremembershort1, R.raw.in_call_alarm,
			R.raw.down, R.raw.duckquackfly, R.raw.duckshotfall1,
			R.raw.duckshotfall2 };// 短音效文件

	private static final int SOUND_LOAD_OK = 1;// 传给Handler的标志
	private final Handler mHandler = new MyHandler();

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		Button b1 = (Button) findViewById(R.id.play100);
		b1.setOnClickListener(this);

		Button b2 = (Button) findViewById(R.id.pause100);
		b2.setOnClickListener(this);
		/**
		 * 
		 * 实例化soundpool 第一个参数表示同时播放的流的数量 第二个参数表示流的类型，一般为STREAM_MUSIC
		 * 第三个参数表示采样率转化质量，当前无效果，使用0作为默认值
		 */
		sndPool = new SoundPool(6, AudioManager.STREAM_MUSIC, 0);
		// soundpool加载监听
		sndPool.setOnLoadCompleteListener(this);

	}

	public void onDestroy() {
		// 销毁音效
		sndPool.release();
		super.onDestroy();
	}

	private class MyHandler extends Handler {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case SOUND_LOAD_OK:
				// 播放指定音频的音效，并返回一个streamID
				// priority —— 流的优先级，值越大优先级高，影响当同时播放数量超出了最大支持数时SoundPool对该流的处理；
				// loop —— 循环播放的次数，0为值播放一次，-1为无限循环，其他值为播放loop+1次（例如，3为一共播放4次）.
				// rate —— 播放的速率，范围0.5-2.0(0.5为一半速率，1.0为正常速率，2.0为两倍速率)
				StreamID[StreamNum] = sndPool.play(msg.arg1, (float) 0.8,
						(float) 0.8, 16, 10, (float) 1.0);
				StreamNum++;
				break;
			}
		}
	}

	/**
	 * soundpool加载监听
	 */
	public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
		// 加载完成后调用Handler
		Message msg = mHandler.obtainMessage(SOUND_LOAD_OK);
		msg.arg1 = sampleId;
		mHandler.sendMessage(msg);
	}

	public void onClick(View v) {
		int id = v.getId();
		switch (id) {
		case R.id.play100:

			if (sndPool != null && StreamNum < 6)
				// 加载音效
				sndPool.load(this, rid[StreamNum], 1);
			break;

		case R.id.pause100:
			if (StreamNumPause < StreamNum) {
				// 暂停音效
				sndPool.pause(StreamID[StreamNumPause]);
				StreamNumPause++;
			}
			Log.v(TAG, "pause");
			break;
		}
	}
}
